// import MessageSenderUtils from '../../libs/message_sender_utils_0_0_3.js';

/**
 * Класс работы с логгированием и сообщениями
 */
export default class MessageSenderUtils {
    /**
    * Имя текущего участника отправки собщений
    * @type {string}
    */
    currentName

	constructor(currentName) {
		this.currentName = currentName;
	}

	/**
	 * Создать объект для отправки и получения сообщений с указанным именем
	 * @param {string} currentName имя участника отправки и получения сообщений
	 * @returns 
	 */
	static Build(currentName) {
		return new MessageSenderUtils(currentName)
	}

	log(text) {
		console.log(`${this.getTimestamp()} [${this.currentName}] ${text}`)
	}

	getTimestamp() {
		var now = new Date();
		var date = new Date(now.getTime() - now.getTimezoneOffset() * 60000)
		return this.formatDateTime(date.toISOString());
	}

	formatDateTime(value) {
		return value.replace('T', ' ').replace('Z', '')
	}

	logMessage(from, to, message) {
		this.log(`${from} -> ${to}: ${message}`)
	}

	getEntry(type, typeSender, message) {
		let entry = new Object();
		entry.type = type
		entry.typeSender = typeSender
		entry.sender = this.currentName
		entry.message = message
		entry.time = this.getTimestamp()

		return entry
	}

	logOutMessage(message) {
		let result = `Исходящее сообщение:\n`
		result += `Отправитель: ${message.sender}\n`
		result += `Получатель: ${message.recipient}\n`
		result += `Данные: ${message.data}`

		this.log(result)
		
		if (message.sender === undefined) {
			console.warn(`Отcутствует значение: message.sender`)
		}
		if (message.recipient === undefined) {
			console.warn(`Отcутствует значение: message.recipient`)
		}
		if (message.data === undefined) {
			console.warn(`Отcутствует значение: message.data`)
		}
	}

	logInMessage(message) {
		let result = `Входящее сообщение:\n`

		result += `Отправитель: ${message.sender}\n`
		result += `Получатель: ${message.recipient}\n`
		result += `Данные: ${message.data}`

		this.log(result)

		if (message.sender === undefined) {
			console.warn(`Отcутствует значение: message.sender`)
		}
		if (message.recipient === undefined) {
			console.warn(`Отcутствует значение: message.recipient`)
		}
		if (message.data === undefined) {
			console.warn(`Отcутствует значение: message.data`)
		}
	}

	logIgnoreMessage(message) {
		this.log(`Сообщение проигнорировано, адресат: '${message['recipient']}'`)
	}

	/**
	* Получить текущее имя отправителя
	* @return имя отправителя
	*/
	getCurrentName() {
	    return this.currentName
	}
}